今天要來講講類別class,在物件導向程式設計(OOP)中是一種物件導向電腦程式語言的構造,是建立物件的藍圖
,描述了所建立的物件共同的特性和方法。您可以定義屬性(Property)
和方法(Method)
。看到一堆不懂的東西不要緊張,屬性、方法和物件導向程式設計我們之後會有章節為大家說明。
下面引用自維基百科讓大家好理解
在現實世界中,經常有屬於同一個類別(class)的物件。例如,某輛
自行車
只是世界上很多自行車中的一輛。在物件導向軟體中,也有很多共享相同特徵的不同的物件:腳踏車、普通機車、重型機車等。可以利用這些物件的相同特徵為它們建立一個藍圖
稱為類別(class)。
簡單來說腳踏車製造商想要設計腳踏車的藍圖,然後在藍圖裡面添加屬性(顏色、重量)及方法(煞車、變速),那這個藍圖我們就叫做class,藉由這個藍圖腳踏車製造商就可以大量製造腳踏車了。
下面我們用程式碼為大家說明
class Bicycle { //最原始腳踏車的藍圖
var level = 1 //變速等級1
let wheels = 2 //有兩個輪子
func addLevel(by number: Int) { //有加變速等級的功能
level += number
}
func reduceLevel(by number: Int) { //也有減變速等級的功能
level -= number
}
}
上面的程式碼中,用來形容腳踏車的就是屬性(property),而裡面的func簡單來說就是方法(method)
那接下來我們要講解class的繼承
特性
簡單來說今天腳踏車商想開發一種新的腳踏車,那我們要重頭畫一份藍圖嗎?不用,因為每輛腳踏車肯定都有兩個輪子跟變速功能嘛,所以我們只要建立新的藍圖裡面寫新的功能就行了,然後繼承原本的藍圖,下面進行範例
class superBicycle: Bicycle { //我們繼承bicycle藍圖,製作一個新的藍圖叫superBicycle
var color = "red" //顏色是紅色的
var weight = 5 //腳踏車5公斤
}
所以superBicycle藍圖裡也會有兩個輪子跟變速功能囉,是不是很易懂,那class就先講到這。
struct跟class有著兄弟情誼,兩者很多時候是通用的,我們需要知道一些底層的知識。
下方引用自Alpha camp
記憶體分成 heap 和 stack 兩塊。class 物件是 reference type,會被儲存在 heap ; struct 物件是 value type,會被存在 stack。一般而言, stack 的執行效率會比 heap 好,所以一模一樣的事情,交給 struct 做,理論上會比 class 有效率,不過「寫出好讀、好維護的程式碼」大部分的時候比「寫出高效能的程式碼」重要。
下面我用最最最簡單讓你理解的方式說明
Value type ── 你複製一份新的藍圖到本地端,你如果改動新的藍圖,原本的藍圖不會有任何改動。
Reference type ── 藍圖在雲端上,大家共用同一份藍圖
網路上有很多文章都有介紹class跟struct的差異,可以看這篇文章,也有解釋什麼是OOP跟POP,回家作業就是把連結的文章看一看吧~